/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Rango;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class RangoPeer {

	private static final String BUSCAR_RANGOS =
		"SELECT id_rango, descripcion FROM rango";

	private static final String BUSCAR_RANGO =	
		"SELECT id_rango, descripcion FROM rango "+
		"WHERE id_rango = &id_rango";

	private static final String INSERTAR_RANGO =
		"INSERT INTO rango( descripcion) VALUES "+
		"('&descripcion')";

	private static final String ACTUALIZAR_RANGO =
		"UPDATE rango "+
		"SET descripcion = '&descripcion' "+
		"WHERE id_rango = &id_rango";

	private static final String ELIMINAR_RANGO =
		"DELETE FROM rango "+
		"WHERE id_rango = &id_rango";

	
	
	
	/** busca en la base de datos todos los registros de la tabla "rango"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de rango
	* @see         				Rango, Statement
	*/
	public static ArrayList<Rango> buscarRangos(Statement stmt) {
		ArrayList<Rango> rangos = new ArrayList<Rango>();

		String sql = BUSCAR_RANGOS; //"SELECT id_rango, descripcion FROM rango";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Rango ran = new Rango();

					ran.setIdRango(rs.getInt("id_rango"));
					ran.setDescripcion(rs.getString("descripcion")); 
					
					rangos.add(ran);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
		}

		return rangos;
	}
	
	/** busca en la base de datos un registro de la tabla "rango"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param idRango		    id de la rango que se desea cosultar
	* 
	* @return					rango buscada
	* @see         				Rango, Statement
	*/
	public static Rango searchRango(Statement stmt, int idRango) {
		Rango rango = new Rango();

		String sql = BUSCAR_RANGO;
		//"SELECT id_rango, descripcion FROM rango "+
		//"WHERE id_rango = &id_rango";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_rango", String.valueOf(idRango));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					rango.setIdRango(rs.getInt("id_rango"));
					rango.setDescripcion(rs.getString("descripcion"));
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return rango;
	}
	
	/** Inserta una Rango en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param rango		    rango que se va a insertar en la base de datos
	 *  
	 * @return					void
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static int insertarRango(Statement stmt, Rango rango) throws SQLException {
		int idNuevaRango = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_RANGO;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&descripcion", rango.getDescripcion());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaRango = rs.getInt("id_rango");
				Util.print("nuevo registro: " + idNuevaRango);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaRango;
	}

		
		

	/** Actualiza una rango en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param rango			rango que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static void actualizarRango(Statement stmt, Rango rango) throws SQLException {
		String sql = ACTUALIZAR_RANGO;
		 //se setean los "parametros": &id_rango, &descripcion
		sql = sql.replaceAll("&id_rango", "" + rango.getIdRango())
				 .replaceAll("&descripcion", rango.getDescripcion());
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un Rango en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param Rango				Rango que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarRango(Statement stmt, Rango rango) throws SQLException {
		String sql = ELIMINAR_RANGO;
		// se setean los "id_rango = &id_rango";
		sql = sql.replaceAll("&id_rango", "" + rango.getIdRango());

		stmt.executeUpdate(sql);
	}
	
}
